home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / bits / fcntl.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-11-14  |  8.5 KB  |  241 lines

  1. /* O_*, F_*, FD_* bit values for Linux.
  2.    Copyright (C) 1995, 1996, 1997, 1998, 2000, 2004, 2006, 2007
  3.    Free Software Foundation, Inc.
  4.    This file is part of the GNU C Library.
  5.  
  6.    The GNU C Library is free software; you can redistribute it and/or
  7.    modify it under the terms of the GNU Lesser General Public
  8.    License as published by the Free Software Foundation; either
  9.    version 2.1 of the License, or (at your option) any later version.
  10.  
  11.    The GNU C Library is distributed in the hope that it will be useful,
  12.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.    Lesser General Public License for more details.
  15.  
  16.    You should have received a copy of the GNU Lesser General Public
  17.    License along with the GNU C Library; if not, write to the Free
  18.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  19.    02111-1307 USA.  */
  20.  
  21. #ifndef    _FCNTL_H
  22. # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
  23. #endif
  24.  
  25. #include <sys/types.h>
  26. #ifdef __USE_GNU
  27. # include <bits/uio.h>
  28. #endif
  29.  
  30.  
  31. /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
  32.    located on an ext2 file system */
  33. #define O_ACCMODE       0003
  34. #define O_RDONLY         00
  35. #define O_WRONLY         01
  36. #define O_RDWR             02
  37. #define O_CREAT           0100    /* not fcntl */
  38. #define O_EXCL           0200    /* not fcntl */
  39. #define O_NOCTTY       0400    /* not fcntl */
  40. #define O_TRUNC          01000    /* not fcntl */
  41. #define O_APPEND      02000
  42. #define O_NONBLOCK      04000
  43. #define O_NDELAY    O_NONBLOCK
  44. #define O_SYNC         010000
  45. #define O_FSYNC         O_SYNC
  46. #define O_ASYNC         020000
  47.  
  48. #ifdef __USE_GNU
  49. # define O_DIRECT     040000    /* Direct disk access.    */
  50. # define O_DIRECTORY    0200000    /* Must be a directory.     */
  51. # define O_NOFOLLOW    0400000    /* Do not follow links.     */
  52. # define O_NOATIME     01000000 /* Do not set atime.  */
  53. # define O_CLOEXEC     02000000 /* Set close_on_exec.  */
  54. #endif
  55.  
  56. /* For now Linux has synchronisity options for data and read operations.
  57.    We define the symbols here but let them do the same as O_SYNC since
  58.    this is a superset.    */
  59. #if defined __USE_POSIX199309 || defined __USE_UNIX98
  60. # define O_DSYNC    O_SYNC    /* Synchronize data.  */
  61. # define O_RSYNC    O_SYNC    /* Synchronize read operations.     */
  62. #endif
  63.  
  64. #ifdef __USE_LARGEFILE64
  65. # define O_LARGEFILE    0100000
  66. #endif
  67.  
  68. /* Values for the second argument to `fcntl'.  */
  69. #define F_DUPFD        0    /* Duplicate file descriptor.  */
  70. #define F_GETFD        1    /* Get file descriptor flags.  */
  71. #define F_SETFD        2    /* Set file descriptor flags.  */
  72. #define F_GETFL        3    /* Get file status flags.  */
  73. #define F_SETFL        4    /* Set file status flags.  */
  74. #ifndef __USE_FILE_OFFSET64
  75. # define F_GETLK    5    /* Get record locking info.  */
  76. # define F_SETLK    6    /* Set record locking info (non-blocking).  */
  77. # define F_SETLKW    7    /* Set record locking info (blocking).    */
  78. #else
  79. # define F_GETLK    F_GETLK64  /* Get record locking info.    */
  80. # define F_SETLK    F_SETLK64  /* Set record locking info (non-blocking).*/
  81. # define F_SETLKW    F_SETLKW64 /* Set record locking info (blocking).  */
  82. #endif
  83. #define F_GETLK64    12    /* Get record locking info.  */
  84. #define F_SETLK64    13    /* Set record locking info (non-blocking).  */
  85. #define F_SETLKW64    14    /* Set record locking info (blocking).    */
  86.  
  87. #if defined __USE_BSD || defined __USE_UNIX98
  88. # define F_SETOWN    8    /* Get owner of socket (receiver of SIGIO).  */
  89. # define F_GETOWN    9    /* Set owner of socket (receiver of SIGIO).  */
  90. #endif
  91.  
  92. #ifdef __USE_GNU
  93. # define F_SETSIG    10    /* Set number of signal to be sent.  */
  94. # define F_GETSIG    11    /* Get number of signal to be sent.  */
  95. #endif
  96.  
  97. #ifdef __USE_GNU
  98. # define F_SETLEASE    1024    /* Set a lease.     */
  99. # define F_GETLEASE    1025    /* Enquire what lease is active.  */
  100. # define F_NOTIFY    1026    /* Request notfications on a directory.     */
  101. # define F_DUPFD_CLOEXEC 1030    /* Duplicate file descriptor with
  102.                    close-on-exit set.  */
  103. #endif
  104.  
  105. /* For F_[GET|SET]FD.  */
  106. #define FD_CLOEXEC    1    /* actually anything with low bit set goes */
  107.  
  108. /* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
  109. #define F_RDLCK        0    /* Read lock.  */
  110. #define F_WRLCK        1    /* Write lock.    */
  111. #define F_UNLCK        2    /* Remove lock.     */
  112.  
  113. /* For old implementation of bsd flock().  */
  114. #define F_EXLCK        4    /* or 3 */
  115. #define F_SHLCK        8    /* or 4 */
  116.  
  117. #ifdef __USE_BSD
  118. /* Operations for bsd flock(), also used by the kernel implementation.    */
  119. # define LOCK_SH    1    /* shared lock */
  120. # define LOCK_EX    2    /* exclusive lock */
  121. # define LOCK_NB    4    /* or'd with one of the above to prevent
  122.                    blocking */
  123. # define LOCK_UN    8    /* remove lock */
  124. #endif
  125.  
  126. #ifdef __USE_GNU
  127. # define LOCK_MAND    32    /* This is a mandatory flock:    */
  128. # define LOCK_READ    64    /* ... which allows concurrent read operations.     */
  129. # define LOCK_WRITE    128    /* ... which allows concurrent write operations.  */
  130. # define LOCK_RW    192    /* ... Which allows concurrent read & write operations.     */
  131. #endif
  132.  
  133. #ifdef __USE_GNU
  134. /* Types of directory notifications that may be requested with F_NOTIFY.  */
  135. # define DN_ACCESS    0x00000001    /* File accessed.  */
  136. # define DN_MODIFY    0x00000002    /* File modified.  */
  137. # define DN_CREATE    0x00000004    /* File created.  */
  138. # define DN_DELETE    0x00000008    /* File removed.  */
  139. # define DN_RENAME    0x00000010    /* File renamed.  */
  140. # define DN_ATTRIB    0x00000020    /* File changed attibutes.  */
  141. # define DN_MULTISHOT    0x80000000    /* Don't remove notifier.  */
  142. #endif
  143.  
  144. struct flock
  145.   {
  146.     short int l_type;    /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.    */
  147.     short int l_whence;    /* Where `l_start' is relative to (like `lseek').  */
  148. #ifndef __USE_FILE_OFFSET64
  149.     __off_t l_start;    /* Offset where the lock begins.  */
  150.     __off_t l_len;    /* Size of the locked area; zero means until EOF.  */
  151. #else
  152.     __off64_t l_start;    /* Offset where the lock begins.  */
  153.     __off64_t l_len;    /* Size of the locked area; zero means until EOF.  */
  154. #endif
  155.     __pid_t l_pid;    /* Process holding the lock.  */
  156.   };
  157.  
  158. #ifdef __USE_LARGEFILE64
  159. struct flock64
  160.   {
  161.     short int l_type;    /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.    */
  162.     short int l_whence;    /* Where `l_start' is relative to (like `lseek').  */
  163.     __off64_t l_start;    /* Offset where the lock begins.  */
  164.     __off64_t l_len;    /* Size of the locked area; zero means until EOF.  */
  165.     __pid_t l_pid;    /* Process holding the lock.  */
  166.   };
  167. #endif
  168.  
  169. /* Define some more compatibility macros to be backward compatible with
  170.    BSD systems which did not managed to hide these kernel macros.  */
  171. #ifdef    __USE_BSD
  172. # define FAPPEND    O_APPEND
  173. # define FFSYNC        O_FSYNC
  174. # define FASYNC        O_ASYNC
  175. # define FNONBLOCK    O_NONBLOCK
  176. # define FNDELAY    O_NDELAY
  177. #endif /* Use BSD.  */
  178.  
  179. /* Advise to `posix_fadvise'.  */
  180. #ifdef __USE_XOPEN2K
  181. # define POSIX_FADV_NORMAL    0 /* No further special treatment.  */
  182. # define POSIX_FADV_RANDOM    1 /* Expect random page references.  */
  183. # define POSIX_FADV_SEQUENTIAL    2 /* Expect sequential page references.     */
  184. # define POSIX_FADV_WILLNEED    3 /* Will need these pages.  */
  185. # define POSIX_FADV_DONTNEED    4 /* Don't need these pages.  */
  186. # define POSIX_FADV_NOREUSE    5 /* Data will be accessed once.  */
  187. #endif
  188.  
  189.  
  190. #ifdef __USE_GNU
  191. /* Flags for SYNC_FILE_RANGE.  */
  192. # define SYNC_FILE_RANGE_WAIT_BEFORE    1 /* Wait upon writeout of all pages
  193.                          in the range before performing the
  194.                          write.  */
  195. # define SYNC_FILE_RANGE_WRITE        2 /* Initiate writeout of all those
  196.                          dirty pages in the range which are
  197.                          not presently under writeback.  */
  198. # define SYNC_FILE_RANGE_WAIT_AFTER    4 /* Wait upon writeout of all pages in
  199.                          the range after performing the
  200.                          write.  */
  201.  
  202. /* Flags for SPLICE and VMSPLICE.  */
  203. # define SPLICE_F_MOVE        1    /* Move pages instead of copying.  */
  204. # define SPLICE_F_NONBLOCK    2    /* Don't block on the pipe splicing
  205.                        (but we may still block on the fd
  206.                        we splice from/to).  */
  207. # define SPLICE_F_MORE        4    /* Expect more data.  */
  208. # define SPLICE_F_GIFT        8    /* Pages passed in are a gift.  */
  209. #endif
  210.  
  211. __BEGIN_DECLS
  212.  
  213. #ifdef __USE_GNU
  214.  
  215. /* Provide kernel hint to read ahead.  */
  216. extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
  217.     __THROW;
  218.  
  219.  
  220. /* Selective file content synch'ing.  */
  221. extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
  222.                 unsigned int __flags);
  223.  
  224.  
  225. /* Splice address range into a pipe.  */
  226. extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
  227.              size_t __count, unsigned int __flags);
  228.  
  229. /* Splice two files together.  */
  230. extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
  231.                __off64_t *__offout, size_t __len,
  232.                unsigned int __flags);
  233.  
  234. /* In-kernel implementation of tee for pipe buffers.  */
  235. extern ssize_t tee (int __fdin, int __fdout, size_t __len,
  236.             unsigned int __flags);
  237.  
  238. #endif
  239.  
  240. __END_DECLS
  241.